package com.qilu.careprogram.dao;

import com.qilu.careprogram.pojo.vo.QaVO;
import org.apache.ibatis.annotations.Param;
import com.qilu.careprogram.pojo.entity.WxUser;
import com.qilu.careprogram.pojo.entity.Question;
import com.qilu.careprogram.pojo.entity.Answer;
import org.apache.ibatis.annotations.Mapper;

import java.util.Date;
import java.util.List;
import java.util.Map;

@Mapper
public interface MessageAlertDAO {
    WxUser getWxUserByHospitalNumberAndOpenid(
            @Param("hospitalNumber") String hospitalNumber,  // 对应 SQL 中的 #{hospitalNumber}
            @Param("openid") String openid                    // 对应 SQL 中的 #{openid}
    );
    void insertWxUser(WxUser wxUser);
    void updateWxUser(WxUser wxUser);
    List<Map<String, Object>> getRecentQuestions(String hospitalNumber);
    List<Map<String, Object>> getAnswersByQuestionId(Long questionId);
    void insertQuestion(Question question);
    Long getQuestionIdByHospitalNumberAndText(String hospitalNumber);
    void insertAnswer(Answer answer);
    /**
     * 查询问答记录
     */
    List<QaVO> selectQa(
            @Param("authority") String authority,
            @Param("hospitalNumber") String hospitalNumber,
            @Param("startTime") Date startTime,
            @Param("endTime") Date endTime,
            @Param("status") Boolean status,
            @Param("questionMh") String questionMh,
            @Param("offset") int offset,
            @Param("pageSize") int pageSize
    );

    /**
     * 统计问答记录总数
     */
    int countQa(
            @Param("authority") String authority,
            @Param("hospitalNumber") String hospitalNumber,
            @Param("startTime") Date startTime,
            @Param("endTime") Date endTime,
            @Param("status") Boolean status,
            @Param("questionMh") String questionMh
    );

    /**
     * 获取来源名称
     */
    String getSourceName(@Param("sourceId") int sourceId);

    /**
     * 根据ID获取用户名
     */
    String getUsernameById(@Param("id") Long id);

    /**
     * 根据答案ID获取问题ID
     */
    Long getQuestionIdByAnswerId(@Param("answerId") Long answerId);

    /**
     * 更新问题状态
     */
    void updateQuestionStatus(@Param("questionId") Long questionId);

    /**
     * 获取当前有效的答案
     */
    Map<String, Object> getActiveAnswer(@Param("questionId") Long questionId);

    /**
     * 插入新答案
     */
    void insertNurseAnswer(
            @Param("questionId") Long questionId,
            @Param("source") int source,
            @Param("name") Long name,
            @Param("text") String text,
            @Param("isused") boolean isused
            //@Param("createTime") Date createTime
    );

    /**
     * 更新答案状态
     */
    void updateAnswerStatus(@Param("answerId") Long answerId, @Param("isused") boolean isused);

    /**
     * 获取有效的问题token
     */
    Map<String, Object> getValidQuestionToken(@Param("questionId") Long questionId);

    /**
     * 插入问题token
     */
    int insertQuestionToken(@Param("questionId") Long questionId, @Param("token") String token);

    /**
     * 验证token有效性
     */
    Integer validateToken(@Param("questionId") Long questionId, @Param("token") String token);

    /**
     * 获取问题详情供医生回答
     */
    Map<String, Object> getQuestionForDoctor(@Param("questionId") Long questionId);

    /**
     * 获取当前护士的有效回答
     */
    String getNurseAnswer(@Param("questionId") Long questionId);

    /**
     * 更新token尝试次数
     */
    void updateTokenAttempts(@Param("questionId") Long questionId, @Param("token") String token);
}